查看原文
其他

满足 Google Play 目标 API 等级 (targetSdkLevel) 的要求

2018-03-22 Google Play 谷歌开发者

从 2018 年 8 月起,所有向 Google Play 提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发。2018 年 11 月起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。


Android 每次版本更新都会作出变更,显著提升应用安全性以及性能并改善整体用户体验。其中部分变更仅适用于那些通过 manifest 文件中的 targetSdkVersion 属性 (即目标 API 等级) 明确指出支持新版 API 行为的应用。


请将您的应用目标 API 等级设置为最新版本并确保用户能够享用这些改进项目,同时允许应用在低版本 Android 仍旧可以运行。适配新目标等级后,应用可以利用 Android 平台最新功能 (latest features) 给用户创造更美好的体验。


本文重点说明了开发者在更新目标 API 中应该注意的几个事项,从而满足 Google Play 的要求。在进行下一步前,请根据您的 app 现有 API 等级阅览:

  • 早于 Android 5.0 (API 等级 21)

  • 早于 Android 6.0 (API 等级 23)

  • 早于 Android 7.0 (API 等级 24)

  • 早于 Android 8.0 (API 等级 26)


注意:如果您的 gradle 文件包含 manifest 条目,您可确认或者更改文件中 targetSdkVersion 的当下值,详情请阅览《如何配置您的构建》(Configure Your Build)。或者说,您也可以使用 manifest 文件中的 android:targetSdkVersion 配置项,具体操作请阅览 <uses-sdk> manifest 属性的相关文档。

 

早于 Android 5.0 (API 等级 21)

请根据 API 版本阅览相应的《行为变更》页面,确保您的应用能够顺利应对各个版本发布:

  • Android 5.0 (API 等级 21)

  • Android 4.4 (API 等级 19)

  • Android 4.1 x (API 等级 16)


早于 Android 6.0 (API 等级 23)

下文列举内容适用于针对 Android 6.0 或更高版本平台开发的应用:

  • 在运行时请求权限

- 危险权限只可以在运行时被授予。应用的 UI 流必须提供相应可供性向用户请求这些权限;

- 但凡可能,您的应用要准备好应对权限请求被拒的情况。譬如说,如果某个用户拒绝您的应用访问设备 GPS,应用须通过其它方法继续运行。


要了解 Android 6.0 (API 等级 23) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档。

 

早于Android 7.0 (API 等级 24)

下文列举内容适用于针对 Android 7.0 或更高版本平台开发的应用:

  • Doze 以及应用待机模式:

请根据《Doze 以及应用待机模式优化》一文中的相关描述设计您的 app,文章涵盖适用几个 Android 版本的逐步变更。

当设备进入 Doze 或者待机模式时,会产生下述系统行为:

- 网络访问限制;

- 推迟应用的 alarms、syncs 和 jobs;

- GPS 以及 Wi-Fi 扫描限制;

- 普通优先级 Firebase Cloud Messaging 消息限制;

  • 权限变更

- 系统将限制访问应用私有目录;

- 在应用外公开 file://URI会导致 FileUriExposedException。开发者可以使用 FileProvider 在应用间进行文件共享;

  • 系统阻止应用链接非 NDK 库。


要了解 Android 7.0 (API 等级 24) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档

 

早于 Android 8.0 (API 等级 26)

下文列举内容适用于针对 Android 8.0 或更高版本平台开发的应用:

  • 后台执行限制 (Background Execution Limits)

- 若您的应用不运行在前台,系统将会限制服务:

   ·· 当应用试图调用 startService() startService 又被禁止时,startService() 会抛出异常;

   ·· startForegroundService() 应用必须使用 startForeground() 和 startForegroundService() 函数启动前台服务;

   ·· 请前往 Android 8.0 (API 等级 26) 《行为变更》页面,仔细阅读关于 JobScheduler API 的变更;

   ·· Firebase Cloud Messaging 要求 10.2.1 或更高版本的 Google Play 服务 SDK;

   ·· Firebase Cloud Messaging documentation 在使用 Firebase Cloud Messaging 时,消息投递受限于后台执行限制。若消息接收需要必要后台工作,如后台数据同步,您的应用须要通过 Firebase Job Dispatcher 或者 JobIntentService 调度任务。详情请阅览《Firebase Cloud Messaging 文档》

- 隐式广播限制:

   ·· 系统会限制隐式广播。有关处理后台事件详情,请阅读 JobSechduler API 文档;

   ·· 后台位置限制;

   ·· 后台运行的应用访问位置数据受限;

      支持 Google Play 服务的设备可以通过 fused location provider 定期获取位置更新。

  • 通知渠道

- 您应该为每个渠道分别定义通知中断设特性:

   ·· 您必须将通知分配到某一渠道 (channel),以便通知显示;

   ·· 该版本 Android 平台支持 NotificationCompat.Builder

  • 隐私

- ANDROID_ID 会根据每个应用签署密钥确定作用域。

要了解 Android 8.0 (API 等级 26) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档



 点击文末 | 阅读原文 | 查看更多指导文档链接



现代化您的应用

当您在更新应用目标 API 等级时,请考虑应用平台近期发布的新功能,让您的应用更为现代化并为用户带去更好的体验。

  • 请将您的 app 从 Google Cloud Messaging (GCM) 迁移至 Firebase Cloud Messaging 最新版本;

  • 使用高级窗口管理:

- Declare Restricted Screen Support 支持更大宽屏比率 (大于 16:9),让应用能够利用最新的硬件技术。确保您的应用调整大小后能填充可用的屏幕空间。万不得已情况下,可以声明最大屏幕宽高比。更多有关最大屏幕宽高比信息,请阅览《声明受限屏幕支持》;

- multiple displays 添加多窗口支持,提升 app 效率并管理多屏幕适配;

- 如果最小化应用能够帮助您改善用户体验,您可添加画中画支持;

- 针对凹口屏幕设备的优化:

   ·· 不要假定状态栏高度,而是使用 WindowInsets 以及 View.OnApplyWindowInsetsListener

   ·· 不要假定应用是全屏显示的,而是通过调用 View.getLocationInWindow() (注意:不是 View.getLocationOnScreen()) 来确定应用屏幕位置;

   ·· 在处理 MotionEvent 时,调用 MotionEvent.getX() 和 MotionEvent.getY();而非 MotionEvent.getRawX()MotionEvent.getRawY()

  • 使用现代摄像头支持:

- 使用 Camera2 API 最大化摄像头利用率;

- Pixel 2 devices 在 Pixel 2 设备上启用 Pixel Visual Core 加速 HDR+ 处理。



检查并更新您的 SDK 和库

请确保您使用的三方 SDK 依赖项支持 API 26:部分 ADK 供应商会在发布说明中写明是否支持;其它供应商则须要进一步调查。如果您使用的 SDK 不支持 API 26,请尽快与 SDK 供应商合作解决该问题。


此外,请注意您的应用或者游戏中的 targetSdkVersion 可能会限制访问私有 Android 平台库,请阅览《将 NDK 应用链接至平台库》获取进一步信息。


您还须要验证您正在使用的 Android 支持库可能存在的任何限制。和以往一样,您必须确保应用中的 compileSdkVersion 与 Android 支持库主要版本能够顺利兼容。


我们推荐您选择小于或等于 Support Library 主要版本的 targetSdkVersion ,并建议您升级到近期发布的兼容 Support Library,从而能够使用到最新版本的兼容性特性和错误修正功能。



 点击文末 | 阅读原文 | 查看更多指导文档链接



测试您的应用

在更新完应用的 API 等级和功能后,您须要测试一些核心用例。下文列举的几条建议并没有涵盖所有情况,但希望能给您提供指导作用。我们建议进行以下几个方面的测试:

  • 测试应用兼容 API 26, 不产生错误和警告;

  • 您的应用应该有相应策略来妥善应对用户拒绝访问权限的情况,并提示用户授予权限。为了达到该效果,您须要:

- 前往应用的信息页面,然后拒绝每个权限;

- 开启应用,确保没有崩溃;

- 进行核心用例测试,并确保所有必须权限请求再被显示;

  • 妥善应对 Doze 模式,达到预期效果且不导致错误:

- 在应用运行时,使用 adb 让您的测试设备进入 Doze 模式:

   ·· 测试任何触发 Firebase Cloud Messaging 消息的用例;

   ·· 测试任何需要使用闹钟或者任务用例;

   ·· 消除所有后台服务依赖;

- 设置您的应用进入待机模式:

   ·· 测试任何触发 Firebase Cloud Messaging 消息的用例;

   ·· 测试任何需要使用闹钟的用例;

  • 处理新拍摄的照片以及视频:

- 检查您的应用是否妥善处理 ACTION_NEW_PICTURE 以及 ACTION_NEW_VIDEO 广播限制 (即移动至 JobScheduler 任务);

- 确保任何依赖此类事件的重要用例都能顺利运行;

  • 应用间分享文件:

- 请测试所有涉及到应用间分享文件数据的案例 (即使是同一开发者开发的应用);

- 请测试其它应用是否能够成功显示内容,而且不引发崩溃。

 

 点击 | 阅读原文 | 查看完整文档及指导链接

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存